/*
 * @Author: 码农 2646995216@qq.com
 * @Date: 2025-02-25 19:48:35
 * @LastEditors: 码农 2646995216@qq.com
 * @LastEditTime: 2025-02-25 20:25:50
 * @FilePath: /signal/sigset_t.cc
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
#include<iostream>
#include<signal.h>
#include<unistd.h>
#include <sys/types.h>


using namespace std;

void PrintPending(sigset_t &pending)
{
	for(int i=31;i>=1;i--)
	{
		if(sigismember(&pending,i))//由于判断该信号是否存在，存在返回1，否则返回0
		{
			cout<<"1";
		}
		else{
			cout<<"0";
		}
	}
	cout<<endl<<endl;//刷新缓冲区
}


int main()
{
	cout<<"pid:"<<getpid()<<endl;
	sigset_t set,olbset;//set:是我们要设置进进程的信号集，olbset:保存原来的信号集
    sigemptyset(&set);//初始化信号集
    sigemptyset(&olbset);//初始化信号集
	
	for(int i=1;i<=10;i++)
	{
        sigaddset(&set,i);//屏蔽1~10号信号，也就是将1~10号比特位设置为1
	}
	
	sigprocmask(SIG_SETMASK,&set,&olbset);//将set信号集覆盖block表，olbset用来保存原来的block表
	 
	sigset_t pending;

    while(true)
	{
		sigpending(&pending);//获取当前进程pending表，将其放入这个变量中

		PrintPending(pending);
		sleep(1);
	}


	return 0;
}
